// 转换pcas.json数据为级联选择格式的工具
const fs = require('fs');
const path = require('path');

// 读取pcas.json文件
function readPCASFile() {
    try {
        const filePath = path.join(__dirname, 'pcas.json');
        const data = fs.readFileSync(filePath, 'utf8');
        return JSON.parse(data);
    } catch (error) {
        console.error('读取文件失败:', error);
        return null;
    }
}

// 转换数据结构
function convertToCascaderFormat(pcasData) {
    const result = [];
    
    // 直辖市列表
    const municipalities = ['北京市', '上海市', '天津市', '重庆市'];
    
    // 遍历所有省份
    for (const provinceName in pcasData) {
        if (pcasData.hasOwnProperty(provinceName)) {
            const provinceData = pcasData[provinceName];
            
            // 创建省份对象
            const province = {
                label: provinceName,
                value: provinceName,
                children: []
            };
            
            // 遍历省份下的所有城市
            for (const cityName in provinceData) {
                if (provinceData.hasOwnProperty(cityName)) {
                    const cityData = provinceData[cityName];
                    
                    // 创建城市对象
                    let city;
                    
                    // 对于直辖市，特殊处理：将中间层级的label和value设置为直辖市名称
                    if (municipalities.includes(provinceName) && cityName === '市辖区') {
                        city = {
                            label: provinceName, // 使用直辖市名称作为中间层级的label
                            value: provinceName, // 使用直辖市名称作为中间层级的value
                            children: []
                        };
                    } else {
                        city = {
                            label: cityName,
                            value: cityName,
                            children: []
                        };
                    }
                    
                    // 遍历城市下的所有区县
                    for (const districtName in cityData) {
                        if (cityData.hasOwnProperty(districtName)) {
                            // 对于区县，我们只需要label和value，不需要街道信息
                            city.children.push({
                                label: districtName,
                                value: districtName
                            });
                        }
                    }
                    
                    // 将城市添加到省份的children中
                    province.children.push(city);
                }
            }
            
            // 将省份添加到结果中
            result.push(province);
        }
    }
    
    return result;
}

// 执行转换并输出结果
function main() {
    const pcasData = readPCASFile();
    if (!pcasData) return;

    const cascaderData = convertToCascaderFormat(pcasData);
    
    // 保存转换后的数据到新文件
    try {
        const outputPath = path.join(__dirname, 'cascaderPCASData.json');
        fs.writeFileSync(outputPath, JSON.stringify(cascaderData, null, 2), 'utf8');
        console.log('数据转换成功，已保存到cascaderPCASData.json');
        
        // 同时输出前几个数据到控制台，方便查看
        console.log('转换后的前几个数据示例：');
        console.log(JSON.stringify(cascaderData.slice(0, 2), null, 2));
    } catch (error) {
        console.error('保存文件失败:', error);
    }
}

// 如果直接运行此脚本，则执行main函数
if (require.main === module) {
    main();
}

// 导出函数，以便在其他模块中使用
module.exports = {
    readPCASFile,
    convertToCascaderFormat,
    main
};